package org.aisen.weibo.sina.ui.widget;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.os.SystemClock;
import android.support.v4.view.MotionEventCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.common.utils.SystemBarUtils;
import org.aisen.android.common.utils.Utils;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppSettings;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
/**
* Created by wangdan on 15-2-11.
*/
public class ProfileScrollView extends ScrollView {
public static final String TAG = "ProfileScrollView";
public ProfileScrollView(Context context) {
super(context);
}
public ProfileScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ProfileScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private static final int INVALID_POINTER = -1;
private LinearLayout child;
private View layTop;
private View layTabStrip;
private ViewPager viewPager;
private View viewToolbar;
private View imgCover;
private View refreshView;
private int mActivePointerId = INVALID_POINTER;
private float mInitialMotionY;
private int action_size;
private BaseActivity activity;
private WeiBoUser mUser;
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (getChildCount() > 0) {
if (getChildAt(0).getHeight() > 0 && child == null) {
child = (LinearLayout) getChildAt(0);
}
}
int themeColor = Utils.resolveColor(getContext(), R.attr.colorPrimary, Color.BLUE);
if (child != null && child.getHeight() > 0 && layTabStrip == null) {
layTabStrip = child.getChildAt(1);
layTabStrip.setBackgroundColor(themeColor);
viewPager = (ViewPager) child.getChildAt(2);
activity = (BaseActivity) getContext();
layTop = activity.findViewById(R.id.layTop);
layTop.setBackgroundColor(themeColor);
viewToolbar = activity.findViewById(R.id.viewToolbar);
if (viewToolbar != null)
viewToolbar.setBackgroundColor(themeColor);
imgCover = activity.findViewById(R.id.imgCover);
activity.findViewById(R.id.viewBgDes).setBackgroundColor(themeColor);
action_size = activity.getResources().getDimensionPixelSize(R.dimen.abc_action_bar_default_height_material);
int statusBar = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
statusBar = SystemBarUtils.getStatusBarHeight(activity);
}
Logger.d(TAG, String.format("topview height = %d, stripView height = %d, toolbar height = %d",
child.getChildAt(0).getHeight(), layTabStrip.getHeight(), action_size));
viewPager.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
getHeight() - layTabStrip.getHeight() - action_size - statusBar));
}
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (viewToolbar != null)
viewToolbar.setAlpha(Math.abs(t * 1.0f / (imgCover.getHeight() - action_size)));
// 设置显示Actionbar的title
if (activity != null) {
if (viewToolbar != null && viewToolbar.getAlpha() >= 0.75f) {
activity.getSupportActionBar().setTitle(mUser.getScreen_name());
}
else {
activity.getSupportActionBar().setTitle("");
}
}
}
public void setAbsListView(View refreshView) {
this.refreshView = refreshView;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = MotionEventCompat.getActionMasked(ev);
if (refreshView != null) {
boolean canChildScrollUp = ViewCompat.canScrollVertically(refreshView, -1);
Logger.d(TAG, String.format("canChildScrollUp = %s", String.valueOf(canChildScrollUp)));
if (canChildScrollUp) {
return false;
}
}
switch (action) {
case MotionEvent.ACTION_DOWN:
mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
final float initialMotionY = getMotionEventY(ev, mActivePointerId);
if (initialMotionY == -1) {
return false;
}
mInitialMotionY = initialMotionY;
break;
case MotionEvent.ACTION_MOVE:
if (mActivePointerId == INVALID_POINTER) {
Logger.e(TAG, "Got ACTION_MOVE event but don't have an active pointer id.");
return false;
}
final float y = getMotionEventY(ev, mActivePointerId);
if (y == -1) {
return false;
}
final float yDiff = y - mInitialMotionY;
if (yDiff < 0) {
if (getChildAt(0).getMeasuredHeight() <= getHeight() + getScrollY()) {
return false;
}
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mActivePointerId = INVALID_POINTER;
break;
}
return super.onInterceptTouchEvent(ev);
}
private float getMotionEventY(MotionEvent ev, int activePointerId) {
final int index = MotionEventCompat.findPointerIndex(ev, activePointerId);
if (index < 0) {
return -1;
}
return MotionEventCompat.getY(ev, index);
}
public void setUser(WeiBoUser user) {
this.mUser = user;
}
}